home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok17.lha
/
IFFtoImage
/
IFFtoImage.dok
< prev
next >
Wrap
Text File
|
1993-08-15
|
4KB
|
149 lines
(*---------------------------------------------------------------------------
:Program : IFFtoImage.mod
:Author : Jochen P. Kupfer
:Address : Buchenweg 22, D-4006 Erkrath 2
:Phone : 02104-40673
:Shortcut : [SIGMA]
:Version : 1.0
:Date : 3/23/89
:Copyright : PD
:Language : Modula-2
:Translator : M2Amiga V 3.2
:Imports : LoadIFF.mod [fbs] & LoadBody [fbs]
:UpDate : none
:Contents : Converts IFF-Brush to ImageData-File.
:Remark : Derived from Pit Burkardt's IFFtoCode.mod on Amok # 3.
---------------------------------------------------------------------------*)
- DOKUMENTATION zum Programm: IFFtoImage
--------------------------------------
1. Vorgeschichte:
Wollte man bisher Images in einem Programm verwenden, sei es für MenuItems,
Gadgets oder auch nur so, dann gab es dafür 2 Möglichkeiten:
a) Millimeterpapier und Taschenrechner bemühen - vergiß es!
b) IFF-Brush (z.B. mit DPaint) zeichnen, und mit Pit Burkharts
Programm IFFtoCode in Modula-2 Source-Code umwandeln.
Die zweite Methode hatte aber mehrere Nachteile:
a) Das Implementationsmodul wurde sehr schnell ziemlich lang.
Beispiel: Aus einer 3 kBytes IFF-Brush wurden über 70 kBytes
Source-Code.
b) .def- und .mod-Files mußten kompiliert werden und lassen damit
das lauffähige Programm anschwellen.
c) Die Image-Daten belegen den Speicher 3fach.
Wegen a) schrieb ich nun Pit an und bat ihn, IFFtoCode doch so umzu-
schreiben, daß ein etwas kompakterer Source-Code entstünde. Daraufhin
antwortete Pit, daß das nur die halbe Miete sei, und wies mich erst auf die
Punkte b) und c) hin. Er meinte aber, daß er im Moment leider keine Zeit
hätte, das Programm entsprechend abzuändern.
Also hab' ich es selbst getan. Allerdings liegen die Daten nun nicht,
wie von Pit vorgeschlagen, als BitMap vor, sondern sind sofort als Image
verwendbar. Grund: Ich hab' keine Ahnung, wie ich aus einer BitMap so
einfach ein Image bekommen soll.
2. Anwendung:
2.1: Umwandlung der IFF-Brush in das Image-Datenfile:
Vom CLI aus: IFFtoImage IFF-Brush-Name ... fertig.
Von der Workbench aus: IFF-Brush-Icon 1x anklicken, SHIFT-Taste drücken,
IFFtoImage 2x anklicken ... fertig.
Ergebnis: Das erzeugte Image-Datenfile hat dann den IFF-Brush-Namen
plus die Endung '.img'
2.2 Verwendung im Programm:
Die ersten 3 Langworte im Image-Datenfile enthalten die Werte für
Imagebreite, \
} in Pixel,
Imagehöhe, /
Anzahl der Bitplanes.
Der Rest des Image-Datenfiles enthält die eigentlichen Image-Daten.
Da das Datenfile UBytes enthält, ich im Programm aber LONGINTs benötige,
vereinbare ich im Programm den anonymen Record BLOCK:
TYPE
BLOCK = RECORD
CASE :BOOLEAN OF
| TRUE : l:ARRAY[0..2] OF LONGINT;
| FALSE: b:ARRAY[0..11] OF UByte;
END;
END;
VAR
block :BLOCK;
Hole mir das Datenfile
Lookup(data,Name,1024,FALSE); (* FALSE = OldFile *)
lese die ersten 12 Bytes ein
ReadByteBlock(data,block.b);
hole die Filelänge
Length(data,dlength); (* need filelength for AllocMem *)
kürze die Filelänge um die ersten 12 Bytes
buffsize := dlength-12;
reserviere mir einen Puffer im ChipMem
AllocMem(buffPtr,buffsize,TRUE); (* TRUE = ChipMem! *)
schließe das Datenfile wieder
Close(data);
und schon kann ich mein Image definieren:
WITH Img DO
leftEdge := 10;
topEdge := 10;
width := block.l[0]; (* read as UBytes, used as LONGINTs *)
height := block.l[1];
depth := block.l[2];
imageData := buffPtr;
planePick := 3; (* for planes 0 and 1 to pick *)
planeOnOff := 0;
nextImage := NIL;
END;
Mit DrawImage(rPtr,ADR(Img),10,10); läßt es sich z.B. auf den Bildschirm
bringen.
Auch einer Verwendung in Gadgets oder MenuItems steht damit nichts mehr im
Wege. Wer noch nähere Hinweise braucht, der sehe sich den Sorce-Code im
File ImgDemo.mod an.
3. Mehrere IFF-Brushes:
Das Programm IFFtoImage verarbeitet immer nur einzelne IFF-Brushes. Mehrere
IFF-Brushes müssen hintereinander konvertiert werden. Bei der Verwendung
sollten diese dann in einer Schleife und/oder einer Prozedur eingelesen
werden.
4. Probleme:
Konnte ich im Moment noch keine feststellen. Für etwaige Hinweise bin ich
jedoch immer dankbar.
Jochen (SIGMA) für A.I.T. (23-3-89)